package com.yihuier.yihuier.Service.UserManager;

import com.yihuier.yihuier.Entity.UserManager.User;
import com.yihuier.yihuier.Mapper.UserManager.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.*;

import static com.yihuier.yihuier.Mapper.Config.SelectConfig.DEFAULT_OFFSET;
import static com.yihuier.yihuier.Mapper.Config.SelectConfig.DEFAULT_ROWS;

@Service
public class UserService {

    /**
     * 数据库映射
     */
    @Autowired
    private UserMapper userMapper;

    /**
     * 获取最新的用户
     *
     * @param offset 偏移量
     * @param rows   用户量
     * @return 用户的结果集
     */
    public List<User> getLatestUsers(int offset, int rows) {
        if (offset == -1) {
            //如果不设置偏移量则默认0
            offset = DEFAULT_OFFSET;
        }
        if (rows == -1) {
            //如果不设置结果量则默认10
            rows = DEFAULT_ROWS;
        }
        return userMapper.selectLatestUsers(offset, rows);
    }

    /**
     * 通过用户账号获取用户ID
     * @param user_account 用户账号
     * @return 用户ID，无为0，有则用户ID号
     */
    public String findUserByUserAccount(String user_account) {
        return userMapper.selectUserByUserAccount(user_account);
    }

    /**
     * 通过用户手机号获取用户ID
     * @param user_phone 用户手机号
     * @return 用户ID，无为0，有则用户ID号
     */
    public String findUserByUserPhone(String user_phone) {
        return userMapper.selectUserByUserPhone(user_phone);
    }


    /**
     * 通过用户邮箱地址获取用户ID
     * @param user_email 用户邮箱地址
     * @return 用户ID，无为0，有则用户ID号
     */
    public String findUserByUserEmail(String user_email) {
        return userMapper.selectUserByUserAccount(user_email);
    }

    /**
     * 通过用户微信号获取用户ID
     * @param user_wechat 用户微信号
     * @return 用户ID，无为0，有则用户ID号
     */
    public String findUserByUserWechat(String user_wechat) {
        return userMapper.selectUserByUserAccount(user_wechat);
    }

    /**
     * 通过用户编号获取用户头像url
     * @param user_id 用户编号
     */
    public User getUserinfomationByUserid(int user_id) {
        return userMapper.selectUserinfomationByUserid(user_id);
    }

    /**
     * 通过用户编号获取用户头像url(为管理员）
     * @param user_id 用户编号
     */
    public User getUserinfomationByUseridForManager(int user_id) {
        return userMapper.selectUserinfomationByUseridForManager(user_id);
    }


    /**
     * 加载用户模型到内存
     * @param user_id 用户ID
     * @param user_password 用户密码
     * @return 用户模型
     */
    public User loadUserByUserAccount(String user_id, String user_password) {
        return userMapper.loadUserByUserAccount(user_id, user_password);
    }

    /**
     * 加载用户模型到内存
     * @param user_wechat 用户微信openid
     * @return 用户模型
     */
    public User loadUserByUserWechat(String user_wechat) {
        return userMapper.loadUserByUserWechat(user_wechat);
    }

    /**
     * 将用户openid绑定到用户
     */
    public int bingdingOpenidToUser(String user_wechat, String user_id, String user_password) {
        return userMapper.bingdingOpenidToUser(user_wechat, user_id, user_password);
    }

    /**
     * 更新用户密码
     */
    public int updateUserPassword(int user_id, String user_oldpassword, String user_newpassword) {
        return userMapper.updateUserPassword(user_id, user_oldpassword, user_newpassword);
    }

    /**
     * 根据密保问题更新密码
     */
    public int updateUserPasswordBySecretProtection(int user_id, String user_password) {
        return userMapper.updateUserPasswordBySecretProtection(user_id, user_password);
    }

    /**
     * 根据user_id获得密保编号及答案
     */
    public User getSecretProtectionProblems(int user_id) {
        return userMapper.selectSecretProtectionProblems(user_id);
    }

    /**
     * 根据用户id数组获得用户名字符串，以","分割
     */
    public String getUserNameByUserID(ArrayList<String> userIdList) {
        String UserNameList = userMapper.selectUserNameByUserId(userIdList.get(0));
        for (int i = 1; i < userIdList.size(); i++) {
            UserNameList = UserNameList + ",";
            UserNameList = UserNameList + userMapper.selectUserNameByUserId(userIdList.get(i));
        }
        return UserNameList;
    }

    public String getUserNameByUserId(String user_id){
        return userMapper.selectUserNameByUserId(user_id);
    }

    /**
     * 根据用户id数组获得用户姓名，头像url数组
     */
    public List<Map<String, Object>> getUsersByUserIds(int[] user_ids) {
        if (user_ids.length == 0) {
            ArrayList<Map<String, Object>> NULLRESULTS = new ArrayList<Map<String, Object>>();
            HashMap<String, Object> users = new HashMap<String, Object>();
            users.put("user", null);
            NULLRESULTS.add(users);
            return NULLRESULTS;
        }
        return userMapper.selectUsersByUserIds(user_ids);
    }

    /**
     * 根据用户id数组获得用户姓名数组
     */
    public String[] getUserNamesByUserIds(int[] user_ids){
        return userMapper.selectUserNamesByUserIds(user_ids);
    }

    public String[] getUserEmailsByUserIds(int[] user_ids){
        return userMapper.selectUserEmailsByUserIds(user_ids);
    }

    /**
     * 得到用户状态
     * */
    public int getUserStatusByUserid(int user_id){
        return userMapper.selectUserStatusByUserid(user_id);
    }

    /**
     * 根据用户id数组得到用户名数组
     * */
    public String[] getUserNamesByUserIds(String[] user_ids){
        return userMapper.selectUserNamesByUserIdsForInvite(user_ids);
    }

    /**
     * 完善用户信息
     * */
    public int perfectUserInfomation(int user_id,String phone_number,String email, int security_question1, String security_answer1, int security_question2,String security_answer2, int security_question3, String security_answer3 ){
        return userMapper.perfectUserInfomation(user_id, phone_number, email, security_question1, security_answer1, security_question2, security_answer2,security_question3,security_answer3 );
    }

    /**
     * 管理员添加新用户
     * */
    public int addUser(String username,String user_account,String user_password){
        String Md5EncodePassword = DigestUtils.md5DigestAsHex(user_password.getBytes());//md5加密密码
        return userMapper.insertUser(username,user_account,Md5EncodePassword);
    }

    /**
     * 获取添加的用户的账号
     * */
    public int getUserIdByAccountAndPassword(String user_name,String user_account, String user_password){
        String Md5EncodePassword = DigestUtils.md5DigestAsHex(user_password.getBytes());//md5加密密码
        return userMapper.selectUserIdByAccountAndPassword(user_name,user_account,Md5EncodePassword);
    }

    /**
     * 管理员删除用户
     * */
    public int deleteUser(String user_id){
        return userMapper.deleteUser(user_id);
    }
}
